package com.lou1052.data.service;



import com.lou1052.data.entity.PersisentObject;
import com.lou1052.data.query.IQuery;
import com.lou1052.data.query.page.IPage;
import com.lou1052.data.query.page.IPageResult;

import java.io.Serializable;

/**
 * 服务接口
 * @See transaction-role.xml
 * Created with IntelliJ IDEA.
 * User: liuqing
 * Date: 2016/1/5
 * Time: 20:56
 * To change this template use File | Settings | File Templates.
 */
public interface Service<ID extends Serializable,PO extends PersisentObject<ID>>{

    /**
     * 分页查询
     * @param query 查询条件
     * @param page  分页参数
     * @return
     */
    IPageResult<PO> query(IQuery query, IPage page);

    /**
     * 根据唯一标识查询
     * @param id
     * @return
     */
    PO find(ID id);

    /**
     * 判断是否存在
     * @param id
     * @return
     */
    boolean has(ID id);

    /**
     * 移除
     * @param id
     */
    void remove(ID id);

    /**
     * 移除
     * @param po
     */
    void remove(PO po);

    /**
     * 增加
     * @param po
     */
    ID add(PO po);

    /**
     * 批量增加
     * @param pos
     */
    void add(Iterable<PO> pos);

    /**
     * 修改
     * @param po
     */
    void modify(PO po);
}
